数据库对象管理

最近更新时间: 2024-10-17 17:10:00

表空间

表空间允许在文件系统中定义用来存放表示数据库对象的文件的位置。在 TDSQL-A PostgreSQL版 中表空间实际上就是给表指定一个存储目录。

通过使用表空间,管理员可以控制一个TDSQL-A PostgreSQL版 安装的磁盘布局,有如下两个用处:

  • 如果初始化集簇所在的分区或者卷用光了空间,而又不能在逻辑上扩展或者做别的操作,那么表空间可以被创建在一个不同的分区上,直到系统可以被重新配置。

  • 表空间允许管理员根据数据库对象的使用模式来优化性能。例如,一个很频繁使用的索引可以被放在非常快并且非常可靠的磁盘上,如一种非常贵的固态设备。同时,一个很少使用的或者对性能要求不高的存储归档数据的表可以存储在一个便宜但比较慢的磁盘系统上。

系统自带表空间:

  1. 表空间 pg_default 是用来存储系统目录对象、用户表、用户表 index、和临时表、临时表 index、内部临时表的默认空间,对应存储目录 $PADATA/base/。

  2. 表空间 pg_global 用来存放系统字典表,对应存储目录 $PADATA/global/。

列出现有的表空间:

postgres-# \db
  List of tablespaces
 Name  | Owner | Location 
------------+-------+----------
pg_default | dbadmin | 
pg_global | dbadmin | 
(2 rows)

数据库

数据库(Database)是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。

列出现有的数据库:

postgres-# \l
              List of databases
 Name  | Owner | Encoding | Collate  |  Ctype  | Access privileges 
-----------+-------+----------+------------+------------+-------------------
colstore | dbadmin | UTF8   | zh_CN.utf8 | zh_CN.utf8 | 
postgres | dbadmin | UTF8   | zh_CN.utf8 | zh_CN.utf8 | 
template0 | dbadmin | UTF8   | zh_CN.utf8 | zh_CN.utf8 | =c/dbadmin     +
     |    |     |      |      | dbadmin=CTc/dbadmin
template1 | dbadmin | UTF8   | zh_CN.utf8 | zh_CN.utf8 | =c/dbadmin     +
     |    |     |      |      | dbadmin=CTc/dbadmin
(4 rows)

模式

模式本质上是一个名字空间,Oracle 里一般叫用户,SQL Server 中叫框架,MySQL 中叫数据库,模式里面包含表、数据类型、函数以及操作符,对象名称可以与在其他模式中存在的对象重名,访问某个模式中的对象时可以使用"模式名.对象名"。

关系型数据库中的一个表是一张二维表:它由行和列组成。

  • 列的数量和顺序是固定的,并且每一列拥有一个名字。

  • 行的数目是变化的,它反映了在一个给定时刻表中存储的数据量。SQL并不保证表中行的顺序。当一个表被读取时,表中的行将以非特定顺序出现,除非明确地指定需要排序。

每一列都有一个数据类型。数据类型约束着一组可以分配给列的可能值,并且它为列中存储的数据赋予了语义,这样它可以用于计算。

例如,一个被声明为数字类型的列将不会接受任何文本串,而存储在这样一列中的数据可以用来进行数学计算。反过来,一个被声明为字符串类型的列将接受几乎任何一种的数据,它可以进行如字符串连接的操作但不允许进行数学计算。

TDSQL-A PostgreSQL版 包括了相当多的内建数据类型,可以适用于很多应用。用户也可以定义他们自己的数据类型。大部分内建数据类型有着显而易见的名称和语义,详细解释参见 数据类型。

一些常用的数据类型是:用于整数的 integer、可以用于分数的 numeric、用于字符串的 text、用于日期的 date、用于一天内时间的 time,以及可以同时包含日期和时间的 timestamp。

索引

索引是提高数据库性能的常用方法。索引可以令数据库服务器以比没有索引快得多的速度查找和取回特定的行。不过索引也在总体上增加了数据库系统的负荷,因此建议恰当地使用它们。

TDSQL-A PostgreSQL版 提供了几种索引类型:普通索引、唯一索引、表达式索引、B-tree、Hash、GiST 和 GIN。每种索引类型都比较适合某些特定的查询类型,因为它们用了不同的算法。缺省时,CREATE INDEX命令将创建 B-tree 索引,它适合大多数情况。

  • 普通索引是最基本的索引,没有任何限制。

  • 唯一索引可用于约束索引属性值的唯一性,或者属性组合值的唯一性。

  • 表达式索引建立在一个函数或者从表中一个或多个属性计算出来的表达式上。表达式索引只有在查询时使用与创建时相同的表达式才会起作用。

  • B-tree 适合处理那些能够按顺序存储的数据之上的等于和范围查询。特别是在一个建立了索引的字段涉及到使用<、>=、=、>、>=操作符之一进行比较的时候,TDSQL-A PostgreSQL版 的查询规划器都会考虑使用 B-tree 索引。等效于这些操作符组合的构造,如BETWEEN 和 IN,也可以用搜索 B-tree 索引实现。

  • 同样,索引列中的 IS NULL 或 IS NOT NULL 条件可以和 B-tree 索引一起使用。B-tree 索引也可以用来按照排序顺序检索数据。这并不总是比一个简单的扫描和排序快,但通常是有帮助的。

  • Hash 索引只能处理简单的等于比较。当一个索引的列涉及到使用=操作符进行比较的时候,查询规划器会考虑使用 Hash 索引。

  • GiST 索引不是单独一种索引类型,而是一种架构,可以在这种架构上实现很多不同的索引策略。因此可以使用 GiST 索引的操作符高度依赖于索引策略(操作符类)作为示例,TDSQL-A PostgreSQL版 的标准发布中包含用于二维几何数据类型的GiST 操作符类,它支持 <<、&<、&>、>>、<<|、&<|、|&>、|>>、&>、<&、~+、&& 操作符的索引查询。

  • GIN 索引是通用倒排索引,它可以处理包含多个键的值(如数组)。与 GiST 类似,GIN 支持用户定义的索引策略可以使用 GIN 索引的操作符根据索引策略的不同而不同。

视图

视图是从一个或者多个表中导出的,它的行为与表非常相似,但是视图是一个虚拟表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。

查看视图列表:

postgres-# \dv
      List of relations
Schema |    Name    | Type | Owner 
--------+--------------------+------+-------
public | pg_stat_statements | view | dbadmin
(1 row)

序列

序列对象(也叫序列生成器)就是用 CREATE SEQUENCE 创建的特殊单行表。一个序列对象通常用于为行或者表生成唯一的标识符。

查看序列列表:

postgres=# \ds
    List of relations
Schema | Name |  Type  | Owner 
--------+--------+----------+-------
public | serial | sequence | dbadmin
(1 row)